library(tidyverse)
## ── Attaching packages ───────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0     ✔ purrr   0.3.0
## ✔ tibble  2.0.1     ✔ dplyr   0.7.8
## ✔ tidyr   0.8.2     ✔ stringr 1.3.1
## ✔ readr   1.3.1     ✔ forcats 0.3.0
## ── Conflicts ──────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(tidyquant)
## Loading required package: lubridate
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
## Loading required package: PerformanceAnalytics
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Attaching package: 'xts'
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
## Loading required package: quantmod
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
library(xts)
library(PerformanceAnalytics)
library(quantmod)
library(lubridate)
library(stringr)
library(TTR)
library(tidyr)
library(data.table)
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:xts':
## 
##     first, last
## The following objects are masked from 'package:lubridate':
## 
##     hour, isoweek, mday, minute, month, quarter, second, wday,
##     week, yday, year
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
## The following object is masked from 'package:purrr':
## 
##     transpose
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(ggplot2)



t0 <- "2018-01-01"
t1 <- "2020-01-03"
ITOT <- read.csv("https://www.ishares.com/us/products/239724/ishares-core-sp-total-us-stock-market-etf/1467271812596.ajax?fileType=csv&fileName=ITOT_holdings&dataType=fund", 
              skip = 10,
              row.names = NULL,
              col.names = c("ticker", "equity", "class", "weight", "price", "shares", 
                            "mkt_value", "ntl_value", "sector", "SEDOL", "ISIN", "exchange"))

ITOT <- ITOT %>%
  filter(class == 'Equity')

ITOT
Sectors <- ITOT %>%
  split(ITOT$sector)

Sectors$Communication
Sectors$`Consumer Discretionary`
Sectors$`Consumer Staples`
Sectors$Energy
Sectors$Financials
Sectors$`Health Care`
Sectors$Industrials
Sectors$`Information Technology`
Sectors$Materials
Sectors$`Real Estate`
Sectors$Utilities
tickers <- as.vector(ITOT[,1]) %>% na.omit() 
communication_tickers <- as.vector(Sectors$Communication[,1]) %>% na.omit() 
discretionary_tickers <- as.vector(Sectors$`Consumer Discretionary`[,1]) %>%  na.omit() 
staples_tickers <- as.vector(Sectors$`Consumer Staples`[,1]) %>%  na.omit() 
energy_tickers <- as.vector(Sectors$Energy[,1]) %>%  na.omit()
financials_tickers <- as.vector(Sectors$Financials[,1]) %>%  na.omit()
healthcare_tickers <- as.vector(Sectors$`Health Care`[,1]) %>%  na.omit()
industrials_tickers <- as.vector(Sectors$Industrials[,1]) %>%  na.omit()
technology_tickers <- as.vector(Sectors$`Information Technology`[,1]) %>%  na.omit()
materials_tickers <- as.vector(Sectors$Materials[,1]) %>%  na.omit()
realestate_tickers <- as.vector(Sectors$`Real Estate`[,1]) %>%  na.omit()
utilities_tickers <- as.vector(Sectors$Utilities[,1]) %>%  na.omit()

tickers <- tickers %>%
  str_replace(., "BRKB", "BRK-B") %>% #Berkshire Hathaway Class B
  str_replace(., "BFA", "BF-A") %>% #Brown-Forman Class A
  str_replace(., "BFB", "BF-B") %>% #Brown-Forman Class B
  str_replace(., "LGFA", "LGF-A") %>% #Lions Gate Entertainment Class A
  str_replace(., "LGFB", "LGF-B") %>% #Lions Gate Entertainment Class B
  str_replace(., "LENB", "LEN-B") %>% #Lennar Class B
  str_replace(., "CWENA", "CWEN-A") %>% #Clearway Energy Class A
  str_replace(., "GEFB", "GEF-B") %>% #Greif Inc Class B
  str_replace(., "BH A", "BH-A") #Biglari Holdings Class A
data_raw <- tq_get(tickers, 
                   get = "stock.prices",
                   from = t0,
                   to = t1)
## Warning: x = 'BF-AM', get = 'stock.prices': Error: BF-AM download failed after two attempts. Error message:
## HTTP error 404.
##  Removing BF-AM.
## Warning: x = 'MOGA', get = 'stock.prices': Error: MOGA download failed after two attempts. Error message:
## HTTP error 404.
##  Removing MOGA.
## Warning: x = 'JWB', get = 'stock.prices': Error: JWB download failed after two attempts. Error message:
## HTTP error 404.
##  Removing JWB.
## Warning: x = 'GTNA', get = 'stock.prices': Error: GTNA download failed after two attempts. Error message:
## HTTP error 404.
##  Removing GTNA.
## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.

## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.
## Warning: x = 'GTXI', get = 'stock.prices': Error: GTXI download failed after two attempts. Error message:
## HTTP error 404.
##  Removing GTXI.
## Warning: x = 'HNR', get = 'stock.prices': Error: HNR download failed after two attempts. Error message:
## HTTP error 404.
##  Removing HNR.
## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.

## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.
## Warning: x = 'ROKA', get = 'stock.prices': Error: ROKA download failed after two attempts. Error message:
## HTTP error 404.
##  Removing ROKA.
## Warning: x = 'OMED', get = 'stock.prices': Error: OMED download failed after two attempts. Error message:
## HTTP error 404.
##  Removing OMED.
## Warning: x = 'AIII', get = 'stock.prices': Error: AIII download failed after two attempts. Error message:
## HTTP error 404.
##  Removing AIII.
## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.

## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.

## Warning: x = '-', get = 'stock.prices': Error: - download failed after two attempts. Error message:
## HTTP error 404.
##  Removing -.
communication_data <- data_raw %>%
  filter(symbol %in% communication_tickers)
communication_data_spread <- communication_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
communication_data_xts <- as.xts(communication_data_spread[,-1], order.by = communication_data_spread$date)

discretionary_data <- data_raw %>%
  filter(symbol %in% discretionary_tickers)

discretionary_data <- discretionary_data %>%
  filter(!symbol %in% "IMBI")

discretionary_data <- discretionary_data %>%
  filter(!symbol %in% "XPEL")

discretionary_data_spread <- discretionary_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
discretionary_data_xts <- as.xts(discretionary_data_spread[,-1], order.by = discretionary_data_spread$date)

staples_data <- data_raw %>%
  filter(symbol %in% staples_tickers)

staples_data <- staples_data %>%
  filter(!symbol %in% "RKDA")

staples_data <- staples_data %>%
  filter(!symbol %in% "BRBR")

staples_data_spread <- staples_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
staples_data_xts <- as.xts(staples_data_spread[,-1], order.by = staples_data_spread$date)

energy_data <- data_raw %>%
  filter(symbol %in% energy_tickers)

energy_data <- energy_data %>%
  filter(!symbol %in% "PED")

energy_data_spread <- energy_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
energy_data_xts <- as.xts(energy_data_spread[,-1], order.by = energy_data_spread$date)

financials_data <- data_raw %>%
  filter(symbol %in% financials_tickers)

financials_data <- financials_data %>%
  filter(!symbol %in% "CRDA")

financials_data <- financials_data %>%
  filter(!symbol %in% "OPRT")

financials_data <- financials_data %>%
  filter(!symbol %in% "PLMR")

financials_data <- financials_data %>%
  filter(!symbol %in% "SPFI")
  
financials_data_spread <- financials_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
financials_data_xts <- as.xts(financials_data_spread[,-1], order.by = financials_data_spread$date)

healthcare_data <- data_raw %>%
  filter(symbol %in% healthcare_tickers)

healthcare_data <- healthcare_data %>%
  filter(!symbol %in% "ALIM")

healthcare_data <- healthcare_data %>%
  filter(!symbol %in% "AVTR")

healthcare_data <- healthcare_data %>%
  filter(!symbol %in% "RAPT")

healthcare_data_spread <- healthcare_data %>%
  distinct() %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
healthcare_data_xts <- as.xts(healthcare_data_spread[,-1], order.by = healthcare_data_spread$date)

industrials_data <- data_raw %>%
  filter(symbol %in% industrials_tickers)
industrials_data_spread <- industrials_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
industrials_data_xts <- as.xts(industrials_data_spread[,-1], order.by = industrials_data_spread$date)

technology_data <- data_raw %>%
  filter(symbol %in% technology_tickers)
technology_data_spread <- technology_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
technology_data_xts <- as.xts(technology_data_spread[,-1], order.by = technology_data_spread$date)

materials_data <- data_raw %>%
  filter(symbol %in% materials_tickers)
materials_data_spread <- materials_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
materials_data_xts <- as.xts(materials_data_spread[,-1], order.by = materials_data_spread$date)

realestate_data <- data_raw %>%
  filter(symbol %in% realestate_tickers)

realestate_data <- realestate_data %>%
  filter(!symbol %in% "DHC")

realestate_data_spread <- realestate_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
realestate_data_xts <- as.xts(realestate_data_spread[,-1], order.by = realestate_data_spread$date)

utilities_data <- data_raw %>%
  filter(symbol %in% utilities_tickers)
utilities_data_spread <- utilities_data %>%
  select("symbol", "date", "adjusted") %>%
  group_by(symbol) %>%
  spread(key = symbol, value = adjusted)
utilities_data_xts <- as.xts(utilities_data_spread[,-1], order.by = utilities_data_spread$date)

table.Stats(communication_data_xts)
table.Stats(discretionary_data_xts)
table.Stats(staples_data_xts)
table.Stats(energy_data_xts)
table.Stats(financials_data_xts)
table.Stats(healthcare_data_xts)
table.Stats(industrials_data_xts)
table.Stats(technology_data_xts)
table.Stats(materials_data_xts)
table.Stats(realestate_data_xts)
table.Stats(utilities_data_xts)
communication_data_ret = Return.calculate(xts(communication_data_xts), method="discrete")
communication_data_ret_annual <- Return.annualized(communication_data_ret, scale = 252, geometric = TRUE)
communication_data_sd = StdDev(xts(communication_data_xts), method="discrete")
communication_data_sd_annual <- StdDev.annualized(communication_data_ret, scale = 252, geometric = TRUE)
communication_data_riskreturn <- rbind(communication_data_ret_annual, communication_data_sd_annual)

communication_data_riskreturn <- as.data.frame(communication_data_riskreturn)
communication_data_riskreturn_t <- transpose(communication_data_riskreturn)
rownames(communication_data_riskreturn_t) <- colnames(communication_data_riskreturn)
colnames(communication_data_riskreturn_t) <- c("annual_ret","annual_stdev")
communication_data_riskreturn_t$ticker <- rownames(communication_data_riskreturn_t)
  
communication_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "communication")
discretionary_data_ret = Return.calculate(xts(discretionary_data_xts), method="discrete")
discretionary_data_ret_annual <- Return.annualized(discretionary_data_ret, scale = 252, geometric = TRUE)
discretionary_data_sd = StdDev(xts(discretionary_data_xts), method="discrete")
discretionary_data_sd_annual <- StdDev.annualized(discretionary_data_ret, scale = 252, geometric = TRUE)
discretionary_data_riskreturn <- rbind(discretionary_data_ret_annual, discretionary_data_sd_annual)

discretionary_data_riskreturn <- as.data.frame(discretionary_data_riskreturn)
discretionary_data_riskreturn_t <- transpose(discretionary_data_riskreturn)
rownames(discretionary_data_riskreturn_t) <- colnames(discretionary_data_riskreturn)
colnames(discretionary_data_riskreturn_t) <- c("annual_ret","annual_stdev")
discretionary_data_riskreturn_t$ticker <- rownames(discretionary_data_riskreturn_t)
  
discretionary_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "discretionary")
## Warning: Ignoring 1 observations
staples_data_ret = Return.calculate(xts(staples_data_xts), method="discrete")
staples_data_ret_annual <- Return.annualized(staples_data_ret, scale = 252, geometric = TRUE)
staples_data_sd = StdDev(xts(staples_data_xts), method="discrete")
staples_data_sd_annual <- StdDev.annualized(staples_data_ret, scale = 252, geometric = TRUE)
staples_data_riskreturn <- rbind(staples_data_ret_annual, staples_data_sd_annual)

staples_data_riskreturn <- as.data.frame(staples_data_riskreturn)
staples_data_riskreturn_t <- transpose(staples_data_riskreturn)
rownames(staples_data_riskreturn_t) <- colnames(staples_data_riskreturn)
colnames(staples_data_riskreturn_t) <- c("annual_ret","annual_stdev")
staples_data_riskreturn_t$ticker <- rownames(staples_data_riskreturn_t)
  
staples_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "staples")
energy_data_ret = Return.calculate(xts(energy_data_xts), method="discrete")
energy_data_ret_annual <- Return.annualized(energy_data_ret, scale = 252, geometric = TRUE)
energy_data_sd = StdDev(xts(energy_data_xts), method="discrete")
energy_data_sd_annual <- StdDev.annualized(energy_data_ret, scale = 252, geometric = TRUE)
energy_data_riskreturn <- rbind(energy_data_ret_annual, energy_data_sd_annual)

energy_data_riskreturn <- as.data.frame(energy_data_riskreturn)
energy_data_riskreturn_t <- transpose(energy_data_riskreturn)
rownames(energy_data_riskreturn_t) <- colnames(energy_data_riskreturn)
colnames(energy_data_riskreturn_t) <- c("annual_ret","annual_stdev")
energy_data_riskreturn_t$ticker <- rownames(energy_data_riskreturn_t)
  
energy_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "energy")
financials_data_ret = Return.calculate(xts(financials_data_xts), method="discrete")
financials_data_ret_annual <- Return.annualized(financials_data_ret, scale = 252, geometric = TRUE)
financials_data_sd = StdDev(xts(financials_data_xts), method="discrete")
financials_data_sd_annual <- StdDev.annualized(financials_data_ret, scale = 252, geometric = TRUE)
financials_data_riskreturn <- rbind(financials_data_ret_annual, financials_data_sd_annual)

financials_data_riskreturn <- as.data.frame(financials_data_riskreturn)
financials_data_riskreturn_t <- transpose(financials_data_riskreturn)
rownames(financials_data_riskreturn_t) <- colnames(financials_data_riskreturn)
colnames(financials_data_riskreturn_t) <- c("annual_ret","annual_stdev")
financials_data_riskreturn_t$ticker <- rownames(financials_data_riskreturn_t)
  
financials_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "financials")
healthcare_data_ret = Return.calculate(xts(healthcare_data_xts), method="discrete")
healthcare_data_ret_annual <- Return.annualized(healthcare_data_ret, scale = 252, geometric = TRUE)
healthcare_data_sd = StdDev(xts(healthcare_data_xts), method="discrete")
healthcare_data_sd_annual <- StdDev.annualized(healthcare_data_ret, scale = 252, geometric = TRUE)
healthcare_data_riskreturn <- rbind(healthcare_data_ret_annual, healthcare_data_sd_annual)

healthcare_data_riskreturn <- as.data.frame(healthcare_data_riskreturn)
healthcare_data_riskreturn_t <- transpose(healthcare_data_riskreturn)
rownames(healthcare_data_riskreturn_t) <- colnames(healthcare_data_riskreturn)
colnames(healthcare_data_riskreturn_t) <- c("annual_ret","annual_stdev")
healthcare_data_riskreturn_t$ticker <- rownames(healthcare_data_riskreturn_t)
  
healthcare_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "healthcare")
industrials_data_ret = Return.calculate(xts(industrials_data_xts), method="discrete")
industrials_data_ret_annual <- Return.annualized(industrials_data_ret, scale = 252, geometric = TRUE)
industrials_data_sd = StdDev(xts(industrials_data_xts), method="discrete")
industrials_data_sd_annual <- StdDev.annualized(industrials_data_ret, scale = 252, geometric = TRUE)
industrials_data_riskreturn <- rbind(industrials_data_ret_annual, industrials_data_sd_annual)

industrials_data_riskreturn <- as.data.frame(industrials_data_riskreturn)
industrials_data_riskreturn_t <- transpose(industrials_data_riskreturn)
rownames(industrials_data_riskreturn_t) <- colnames(industrials_data_riskreturn)
colnames(industrials_data_riskreturn_t) <- c("annual_ret","annual_stdev")
industrials_data_riskreturn_t$ticker <- rownames(industrials_data_riskreturn_t)
  
industrials_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "industrials")
technology_data_ret = Return.calculate(xts(technology_data_xts), method="discrete")
technology_data_ret_annual <- Return.annualized(technology_data_ret, scale = 252, geometric = TRUE)
technology_data_sd = StdDev(xts(technology_data_xts), method="discrete")
technology_data_sd_annual <- StdDev.annualized(technology_data_ret, scale = 252, geometric = TRUE)
technology_data_riskreturn <- rbind(technology_data_ret_annual, technology_data_sd_annual)

technology_data_riskreturn <- as.data.frame(technology_data_riskreturn)
technology_data_riskreturn_t <- transpose(technology_data_riskreturn)
rownames(technology_data_riskreturn_t) <- colnames(technology_data_riskreturn)
colnames(technology_data_riskreturn_t) <- c("annual_ret","annual_stdev")
technology_data_riskreturn_t$ticker <- rownames(technology_data_riskreturn_t)
  
technology_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "technology")
materials_data_ret = Return.calculate(xts(materials_data_xts), method="discrete")
materials_data_ret_annual <- Return.annualized(materials_data_ret, scale = 252, geometric = TRUE)
materials_data_sd = StdDev(xts(materials_data_xts), method="discrete")
materials_data_sd_annual <- StdDev.annualized(materials_data_ret, scale = 252, geometric = TRUE)
materials_data_riskreturn <- rbind(materials_data_ret_annual, materials_data_sd_annual)

materials_data_riskreturn <- as.data.frame(materials_data_riskreturn)
materials_data_riskreturn_t <- transpose(materials_data_riskreturn)
rownames(materials_data_riskreturn_t) <- colnames(materials_data_riskreturn)
colnames(materials_data_riskreturn_t) <- c("annual_ret","annual_stdev")
materials_data_riskreturn_t$ticker <- rownames(materials_data_riskreturn_t)
  
materials_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "materials")
realestate_data_ret = Return.calculate(xts(realestate_data_xts), method="discrete")
realestate_data_ret_annual <- Return.annualized(realestate_data_ret, scale = 252, geometric = TRUE)
realestate_data_sd = StdDev(xts(realestate_data_xts), method="discrete")
realestate_data_sd_annual <- StdDev.annualized(realestate_data_ret, scale = 252, geometric = TRUE)
realestate_data_riskreturn <- rbind(realestate_data_ret_annual, realestate_data_sd_annual)

realestate_data_riskreturn <- as.data.frame(realestate_data_riskreturn)
realestate_data_riskreturn_t <- transpose(realestate_data_riskreturn)
rownames(realestate_data_riskreturn_t) <- colnames(realestate_data_riskreturn)
colnames(realestate_data_riskreturn_t) <- c("annual_ret","annual_stdev")
realestate_data_riskreturn_t$ticker <- rownames(realestate_data_riskreturn_t)
  
realestate_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "realestate")
utilities_data_ret = Return.calculate(xts(utilities_data_xts), method="discrete")
utilities_data_ret_annual <- Return.annualized(utilities_data_ret, scale = 252, geometric = TRUE)
utilities_data_sd = StdDev(xts(utilities_data_xts), method="discrete")
utilities_data_sd_annual <- StdDev.annualized(utilities_data_ret, scale = 252, geometric = TRUE)
utilities_data_riskreturn <- rbind(utilities_data_ret_annual, utilities_data_sd_annual)

utilities_data_riskreturn <- as.data.frame(utilities_data_riskreturn)
utilities_data_riskreturn_t <- transpose(utilities_data_riskreturn)
rownames(utilities_data_riskreturn_t) <- colnames(utilities_data_riskreturn)
colnames(utilities_data_riskreturn_t) <- c("annual_ret","annual_stdev")
utilities_data_riskreturn_t$ticker <- rownames(utilities_data_riskreturn_t)
  
utilities_data_riskreturn_t %>%
  plot_ly(type = "scatter", 
          mode = "markers", 
          x = ~ annual_ret, 
          y = ~ annual_stdev,
        hoverinfo = 'text',
        text = ~paste('</br> Ticker: ', ticker,
                      '</br> Ret: ', annual_ret,
                      '</br> SD: ', annual_stdev)) %>%
  layout(title = "utilities")